package com.seckill.service;

import com.seckill.domain.MiaoshaUser;
import com.seckill.vo.LoginVo;
import javax.servlet.http.HttpServletResponse;

/**
 * @author yangjunwei
 * @date 2021/10/29 3:43 下午
 */
public interface MiaoshaUserService {

    /**
     * 用户登陆
     * @param loginVo 登陆信息
     * @return 登陆结果
     */
    boolean login(HttpServletResponse httpServletResponse, LoginVo loginVo);

    /**
     * 更新用户密码 同时更新缓存，保证缓存和DB一致
     * @param token 登陆token
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    boolean updatePassword(String token, Long userId, String oldPassword,String newPassword);

    /**
     * 查询用户信息(Cache-aside)
     * cache未命中，查询DB，并添加cache
     * @param userId 用户Id
     * @return 用户信息
     */
    MiaoshaUser selectMiaoshaUserById(Long userId);

    /**
     * 根据token获取用户信息
     * @param token token
     * @return 秒杀用户
     */
    MiaoshaUser getMiaoshaUserByToken( String token);

    /**
     * 添加登陆用户信息
     * 1.redis；2.cache
     * @param token token，设置过期时间30分（若用户不是第一次登陆，可以重制token的过期时间）
     * @param miaoshaUser 用户
     */
    void addLoginUserInfo(HttpServletResponse httpServletResponse, String token, MiaoshaUser miaoshaUser);

}
